<?php
/**
 * Copyright (c) 2008-2011 Submit Consulting. Lima-Peru. All Right Reserved.
 * @author Ing. Angel Sullon M. (asullom@hotmail.com)
 * Created: 21.SEP.2000
 * Last Modify: 11.AGO.2011
 * Description of ItemData: CRUD
 */
class ItemData {

	public function create(Item $nuevo) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$r=0;
		try{
			$tran->begin();
			$qry=" SELECT COALESCE(MAX(ItemId)+1,1) AS Id FROM Item ";
			$rs=mysql_query($qry) or die("<p class=error>".mysql_error()." table Item</p>");
			if( $row=mysql_fetch_array($rs) )
			$nuevo->setItemId( $row["Id"] );
			$qry=" INSERT INTO Item
            	(ItemId,ProductoId,ItemTipo,Titulo,Descripcion,
            	Estado,Prioridad,AsignadoA,Esfuerzo,TaskFlujo,
            	TaskBloqueado,ImpeResolucion,BugGravedad,BugAceptacion,EnviadoPor,
            	Historia, FechaAlta)
                values(?,?,?,?,?   ,?,?,?,?,?    ,?,?,?,?,?    ,? ,now()) ";
			$pre = new PrepareQuery($qry);
			$pre->set($nuevo->getItemId());
			$pre->set($nuevo->getProductoRef()->getProductoId());
			$pre->set($nuevo->getItemTipo());
			$pre->set($nuevo->getTitulo());
			$pre->set($nuevo->getDescripcion());
			$pre->set($nuevo->getEstado());
			$pre->set($nuevo->getPrioridad());
			$pre->set($nuevo->getAsignadoARef()->getUsuarioId());
			$pre->set($nuevo->getEsfuerzo());
			$pre->set($nuevo->getTaskFlujo());
			$pre->set($nuevo->getTaskBloqueado());
			$pre->set($nuevo->getImpeResolucion());
			$pre->set($nuevo->getBugGravedad());
			$pre->set($nuevo->getBugAceptacion());
			$pre->set($nuevo->getEnviadoPorRef()->getUsuarioId());
			$pre->set($nuevo->getHistoria());
			mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Item", E_USER_ERROR. "</p>");;
			$r=mysql_affected_rows();
			$tran->commit();
		}catch(Exception $e){
			$tran->rollback();
			throw new GlobalException("ItemData.create ".$e->getMessage());
		}
		$tran->close();
		return $r;
	}

	public function listByFilter($productoId, $itemTipo, $asignadoA = '') {//CRUD create, reader, update, delete
		$tran= new ConnectDb();
		$tran->getConnection();
		$li=array();
		try{
			$qry=" SELECT i.ItemId,i.ProductoId,i.ItemTipo,i.Titulo,i.Descripcion,
            	i.Estado,i.Prioridad,i.AsignadoA,i.Esfuerzo,i.TaskFlujo,
            	i.TaskBloqueado,i.ImpeResolucion,i.BugGravedad,i.BugAceptacion,i.EnviadoPor,
            	i.Historia, DATE_FORMAT(i.FechaAlta, '%d/%c/%Y') as FechaAlta, u.Nombres as EnviadoPorNombres
                FROM Item i, Usuario u
                WHERE  i.EnviadoPor=u.UsuarioId AND i.ProductoId=? AND i.ItemTipo LIKE ? ";
                if( !empty ($asignadoA)) $qry .= " AND i.AsignadoA=? ";
               $qry .=" order by i.ItemId desc"; //, Producto p i.ProductoId=p.ProductoId AND

			$pre = new PrepareQuery($qry);
			$pre->set($productoId);
                        $pre->set($itemTipo.'%');
                        if( !empty ($asignadoA)) $pre->set($asignadoA);
			$rs=mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Item", E_USER_ERROR. "</p>");
			$i=0;
			while( $row=mysql_fetch_array($rs) ) {
				$d=new Item();
				$d->setItemId($row["ItemId"]);
				$d->getProductoRef()->setProductoId($row["ProductoId"]);
				$d->setItemTipo($row["ItemTipo"]);
				$d->setTitulo($row["Titulo"]);
				$d->setDescripcion($row["Descripcion"]);
				$d->setEstado($row["Estado"]);
				$d->setPrioridad($row["Prioridad"]);
				$d->getAsignadoARef()->setUsuarioId($row["AsignadoA"]);
                             //como la relacion con Usuario es null, entonces
                                $qry=" SELECT u.UsuarioId,COALESCE(u.Foto,'SinFoto.jpg') as Foto,u.Nombres,u.Cargo,u.EMail,
                                        u.Celular,u.Usuario,u.Clave,u.Privilegio,u.CuentaActiva,
                                        u.ForzarClave,DATE_FORMAT(u.FechaAlta, '%d/%c/%Y') as FechaAlta
                                        FROM Usuario u
                                        WHERE  u.UsuarioId=?";
                                                $pre = new PrepareQuery($qry);
                                                $pre->set($row["AsignadoA"]);
                                                $rs2=mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Usuario", E_USER_ERROR. "</p>");;
                                                if( $row2=mysql_fetch_array($rs2) ) {
                                                        $d->getAsignadoARef()->setNombres($row2["Nombres"]);
                                                }

				$d->setEsfuerzo($row["Esfuerzo"]);
				$d->setTaskFlujo($row["TaskFlujo"]);
				$d->setTaskBloqueado($row["TaskBloqueado"]);
				$d->setImpeResolucion($row["ImpeResolucion"]);
				$d->setBugGravedad($row["BugGravedad"]);
				$d->setBugAceptacion($row["BugAceptacion"]);
				$d->getEnviadoPorRef()->setUsuarioId($row["EnviadoPor"]);
                                $d->getEnviadoPorRef()->setNombres($row["EnviadoPorNombres"]);
				$d->setHistoria($row["Historia"]);
                                $d->setFechaAlta($row["FechaAlta"]);
				$li[$i++]=$d;
			}
			mysql_free_result($rs);
		}catch(Exception $e){
			throw new GlobalException("ItemData.listByFilter ".$e->getMessage());
		}
		$tran->close();
		return $li;
	}

	public function findByPk($id) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$d=new Item();
		try{
			$qry=" SELECT i.ItemId,i.ProductoId,i.ItemTipo,i.Titulo,i.Descripcion,
            	i.Estado,i.Prioridad,i.AsignadoA,i.Esfuerzo,i.TaskFlujo,
            	i.TaskBloqueado,i.ImpeResolucion,i.BugGravedad,i.BugAceptacion,i.EnviadoPor,
            	i.Historia, u.Nombres as EnviadoPorNombres
                FROM Item i, Usuario u
                WHERE  i.EnviadoPor=u.UsuarioId AND  i.ItemId=?";
			$pre = new PrepareQuery($qry);
			$pre->set($id);
			$rs=mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Item", E_USER_ERROR. "</p>");;
			if( $row=mysql_fetch_array($rs) ) {
				$d->setItemId($row["ItemId"]);
				$d->getProductoRef()->setProductoId($row["ProductoId"]);
				$d->setItemTipo($row["ItemTipo"]);
				$d->setTitulo($row["Titulo"]);
				$d->setDescripcion($row["Descripcion"]);
				$d->setEstado($row["Estado"]);
				$d->setPrioridad($row["Prioridad"]);
				$d->getAsignadoARef()->setUsuarioId($row["AsignadoA"]);
				$d->setEsfuerzo($row["Esfuerzo"]);
				$d->setTaskFlujo($row["TaskFlujo"]);
				$d->setTaskBloqueado($row["TaskBloqueado"]);
				$d->setImpeResolucion($row["ImpeResolucion"]);
				$d->setBugGravedad($row["BugGravedad"]);
				$d->setBugAceptacion($row["BugAceptacion"]);
				$d->getEnviadoPorRef()->setUsuarioId($row["EnviadoPor"]);
                                $d->getEnviadoPorRef()->setNombres($row["EnviadoPorNombres"]);
				$d->setHistoria($row["Historia"]);
			}
			mysql_free_result($rs);
		}catch(Exception $e){
			throw new GlobalException("ItemData.findByPk ".$e->getMessage());
		}
		$tran->close();
		return $d;
	}

	public function update(Item $dato) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$r=0;
		try{
			$qry=" UPDATE Item SET
                ProductoId = ?,ItemTipo = ?,Titulo = ?,Descripcion = ?,
            	Estado = ?,Prioridad = ?,AsignadoA = ?,Esfuerzo = ?,TaskFlujo = ?,
            	TaskBloqueado = ?,ImpeResolucion = ?,BugGravedad = ?,BugAceptacion = ?,EnviadoPor = ?,
            	Historia = ?
                WHERE ItemId=?";
			$pre = new PrepareQuery($qry);
			$pre->set($dato->getProductoRef()->getProductoId());
			$pre->set($dato->getItemTipo());
			$pre->set($dato->getTitulo());
			$pre->set($dato->getDescripcion());
			$pre->set($dato->getEstado());
			$pre->set($dato->getPrioridad());
			$pre->set($dato->getAsignadoARef()->getUsuarioId());
			$pre->set($dato->getEsfuerzo());
			$pre->set($dato->getTaskFlujo());
			$pre->set($dato->getTaskBloqueado());
			$pre->set($dato->getImpeResolucion());
			$pre->set($dato->getBugGravedad());
			$pre->set($dato->getBugAceptacion());
			$pre->set($dato->getEnviadoPorRef()->getUsuarioId());
			$pre->set($dato->getHistoria());
			$pre->set($dato->getItemId());
			mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Item", E_USER_ERROR. "</p>");
			$r=mysql_affected_rows();
		}catch(Exception $e){
			throw new GlobalException("ItemData.update ".$e->getMessage());
		}
		$tran->close();
		return $r;
	}

	public function delete($id) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$r=0;
		try{
			$qry=" DELETE FROM Item WHERE ItemId=? ";
			$pre = new PrepareQuery($qry);
			$pre->set($id);
			mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Item", E_USER_ERROR. "</p>");;
			$r=mysql_affected_rows();
		}catch(Exception $e){
			throw new GlobalException("ItemData.delete ".$e->getMessage());
		}
		$tran->close();
		return $r;
	}

}
?>
